:art: Add screen_eqpt_result

huangqimin001 3 years ago
parent
commit
322296496d
4 changed files with 107 additions and 1 deletions
  1. 89 0
      api/eqpt_views.py
  2. 3 0
      api/urls.py
  3. 14 0
      equipment/models.py
  4. 1 1
      requirements.txt

+ 89 - 0
api/eqpt_views.py

@@ -85,6 +85,18 @@ def eqpt_onoff(request):
85 85
     return response()
86 86
 
87 87
 
88
+@logit
89
+def eqpt_remark(request):
90
+    macid = request.POST.get('macid', '')
91
+    remark = request.POST.get('remark', '')
92
+
93
+    ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
94
+        'remark': remark,
95
+    })
96
+
97
+    return response()
98
+
99
+
88 100
 @logit(body=True)
89 101
 def eqpt_list(request):
90 102
     point_id = request.POST.get('point_id', '')
@@ -162,6 +174,83 @@ def eqpt_result(request):
162 174
 
163 175
 
164 176
 @logit
177
+def screen_eqpt_result(request):
178
+    point_id = request.POST.get('point_id', '')
179
+    kw = request.POST.get('kw', '')
180
+    page = request.POST.get('page', 1)
181
+    num = request.POST.get('num', 20)
182
+
183
+    try:
184
+        point = IsolationPointInfo.objects.get(point_id=point_id, status=True)
185
+    except IsolationPointInfo.DoesNotExist:
186
+        return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
187
+
188
+    eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True)
189
+    macids = eqpts.values_list('macid', flat=True)
190
+
191
+    logs = ThermometerMeasureInfo.objects.filter(
192
+        point_id=point_id,
193
+        point_measure_ymd=tc.local_string(format='%Y-%m-%d'),
194
+        point_measure_window=point.point_measure_window,
195
+        macid__in=macids,
196
+        status=True,
197
+    ).values('macid', 'temperature')
198
+    logs = {log.get('macid'): log.get('temperature') for log in logs}
199
+
200
+    infos = IsolationPointUserInfo.objects.filter(point_id=point_id, status=True).values('pk', 'fields')
201
+    infos = {info.get('pk'): info.get('fields') for info in infos}
202
+
203
+    total_active_eqpt_num = eqpts.count()
204
+    has_upload_temperature_num = len(logs)
205
+    temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5])
206
+
207
+    if kw:
208
+        eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw))
209
+    eqpts = [{**eqpt.screen_data, **{
210
+        'has_upload': eqpt.macid in logs,
211
+        'temperature': logs.get(eqpt.macid, 0),
212
+    }, **{field.get('key', ''): field.get('value', '') for field in infos.get(eqpt.ipui_pk, {})}} for eqpt in eqpts]
213
+    reminds = [{
214
+        'name': eqpt.get('name'),
215
+        'room': eqpt.get('room'),
216
+        'content': eqpt.get('remark'),
217
+    } for eqpt in eqpts if eqpt.get('remark')]
218
+    eqpts, left = pagination(eqpts, page, num)
219
+
220
+    # var name: String = ""
221
+    # var room: String = ""
222
+    # var phone: String = ""
223
+    # var sex: String = ""
224
+    # var age: String = ""
225
+    # var temperature: String = ""
226
+    # var status: String = ""
227
+    # var remind: String = ""
228
+    # var last_report_time: String = ""
229
+    # var observed_days: String = ""
230
+    eqpts = [{
231
+        'name': eqpt.get('name', ''),
232
+        'room': eqpt.get('room', ''),
233
+        'phone': eqpt.get('phone', ''),
234
+        'sex': eqpt.get('sex', ''),
235
+        'age': eqpt.get('age', ''),
236
+        'temperature': eqpt.get('temperature', ''),
237
+        'status': ThermometerEquipmentInfo.final_temperature_status(eqpt.get('temperature', 0)),
238
+        'last_report_time': eqpt.get('last_submit_at', ''),
239
+        'observed_days': 1,
240
+    } for eqpt in eqpts]
241
+
242
+    return response(data={
243
+        'eqpts': eqpts,
244
+        'left': left,
245
+        'reminds': reminds,
246
+        'total_active_eqpt_num': total_active_eqpt_num,
247
+        'has_upload_temperature_num': has_upload_temperature_num,
248
+        'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num,
249
+        'temperature_over_375': temperature_over_375,
250
+    })
251
+
252
+
253
+@logit
165 254
 def upload_temperature(request):
166 255
     request.POST = request.POST or json.loads(request.body)
167 256
     macid = request.POST.get('mac', '')

+ 3 - 0
api/urls.py

@@ -38,6 +38,7 @@ urlpatterns += [
38 38
 urlpatterns += [
39 39
     url(r'^eqpt/bind$', eqpt_views.eqpt_bind, name='eqpt_bind'),
40 40
     url(r'^eqpt/onoff$', eqpt_views.eqpt_onoff, name='eqpt_onoff'),
41
+    url(r'^eqpt/remark$', eqpt_views.eqpt_remark, name='eqpt_remark'),
41 42
     url(r'^eqpt/list$', eqpt_views.eqpt_list, name='eqpt_list'),
42 43
     url(r'^eqpt/result$', eqpt_views.eqpt_result, name='eqpt_result'),
43 44
 ]
@@ -65,4 +66,6 @@ urlpatterns += [
65 66
     url(r'^screen/login$', screen_views.screen_login, name='screen_login'),
66 67
     url(r'^screen/info/set$', screen_views.screen_info_set, name='screen_info_set'),
67 68
     url(r'^screen/info$', screen_views.screen_info, name='screen_info'),
69
+
70
+    url(r'^screen/eqpt/result$', eqpt_views.screen_eqpt_result, name='screen_eqpt_result'),
68 71
 ]

+ 14 - 0
equipment/models.py

@@ -172,6 +172,13 @@ class ThermometerEquipmentInfo(BaseModelMixin):
172 172
     def __unicode__(self):
173 173
         return self.pk
174 174
 
175
+    def final_temperature_status(temperature):
176
+        if not temperature:
177
+            return '-'
178
+        if temperature > 37.5:
179
+            return '异常'
180
+        return '正常'
181
+
175 182
     @property
176 183
     def data(self):
177 184
         return {
@@ -195,6 +202,13 @@ class ThermometerEquipmentInfo(BaseModelMixin):
195 202
             'created_at': tc.local_string(utc_dt=self.created_at),
196 203
         }
197 204
 
205
+    @property
206
+    def screen_data(self):
207
+        return {
208
+            'remark': self.remark,
209
+            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at),
210
+        }
211
+
198 212
 
199 213
 class ThermometerMeasureInfo(BaseModelMixin):
200 214
     point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)

+ 1 - 1
requirements.txt

@@ -4,7 +4,7 @@ jsonfield==3.1.0
4 4
 mysqlclient==2.0.3
5 5
 paho-mqtt==1.5.1
6 6
 pysnippets==1.1.4
7
-requests==2.25.1
7
+requests==2.26.0
8 8
 rlog==0.3
9 9
 -r requirements_dj.txt
10 10
 -r requirements_pywe.txt